package com.cheng.chengliving.commodity.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.cheng.chengliving.commodity.entity.AttrAttrgroupRelationEntity;
import com.cheng.common.utils.PageUtils;
import com.cheng.chengliving.commodity.entity.AttrEntity;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * 商品属性表
 *
 * @author zhucheng
 * @email 1920361386@qq.com
 * @date 2022-11-28 14:49:22
 */
public interface AttrService extends IService<AttrEntity> {

    PageUtils queryPage(Map<String, Object> params);

    /**
     * 增加接口,可以完成保存商品属性(基本属性)的同时,还需要保存该基本属性和属性组的关联关系
     */

    void saveAttrAndRelation(AttrEntity attrEntity);

    //增加根据分类categoryId+查询条件[key]+进行分页检索的AIP接口
    //根据自己的业务逻辑,进行定制
    PageUtils queryBaseAttrPage(Map<String,Object> params, Long categoryId);

    //修改基本属性以及与属性组的关联信息
    void updateByAttr(AttrEntity attrEntity);

    //删除基本属性以及与属性组的关联信息
    void deleteByAttrId(Collection<? extends Serializable> attrIds);

    PageUtils querySaleAttrPage(Map<String,Object> params, Long categoryId);

    /**
     * 根据属性组id返回该属性组关联的基本属性
     */
    List<AttrEntity> getRelationAttr(Long attrgroupId);

    /**
     * 批量删除属性组和属性的关联关系
     */
    void deleteRelation(AttrAttrgroupRelationEntity[] attrAttrgroupRelationEntities);

    /**
     * 获取某个属性组可以关联的基本属性
     * 1. 如果某个基本属性已经和某个属性组中的属性关联了,就不能再关联了;
     * 2. 某个属性组可以关联的基本属性必须是同一个分类的[categoryId]
     */
    //得到可以关联的属性
    PageUtils getAllowRelationAttr(Map<String,Object> params,Long attrgroupId);


}

